273069f6e3086c5fccdd2a219a3caef51c3e66d9,src/main/java/com/jsoniter/IterImplNumber.java,IterImplNumber,readUnsignedLong,#JsonIterator#,332
Before Change
long result = 0;
for (; ; ) {
result = result * 10 + v;
c = IterImpl.readByte(iter);
v = digits[c];
if (v == -1) {
iter.unreadByte();
After Change
}
long value = ind;
for (; ; ) {
for (int i = iter.head; i < iter.tail; i++) {
ind = intDigits[iter.buf[i]];
if (ind == INVALID_CHAR_FOR_NUMBER) {
iter.head = i;
return value;
}
value = (value << 3) + (value << 1) + ind;
if (value < 0) {
// overflow
if (value == Long.MIN_VALUE) {
// if there is more number following, subsequent read will fail anyway
iter.head = i;
return value;
} else {
throw iter.reportError("readPositiveLong", "value is too large for long");
}
}
}
if (!IterImpl.loadMore(iter)) {
return value;
}
}
}